package yao.thread.daemon;

import java.util.ArrayDeque;
import java.util.Deque;


/*守护线程的创建和运行(Daemon)
优先级很低，当同一应用程序没有其他的线程运行的时候，守护线程才运行.当守护线程是程序中唯一运行的线程时候，守护线程执行结束后，JVM也就结束了这个程序
通常被用来作为同一程序中普通线程的服务提供者。他们通常是无限循环，已等待服务请求或者执行线程任务。他们不能做重要的工作。因为我们不可能知道首付线程什么时候能够获取CPU时钟，并且在没有其他线程
运行的时候，守护线程随时可能结束。典型：java垃圾回收器*/
/**
 * Main class of the example. Creates three WriterTaks and a CleanerTask
 *
 */
public class Main {

	/**
	 * Main method of the example. Creates three WriterTasks and a CleanerTask
	 * 
	 * @param args
	 */
	public static void main(String[] args) {

		// Creates the Event data structure
		Deque<Event> deque = new ArrayDeque<Event>();

		// Creates the three WriterTask and starts them
		WriteTask writer = new WriteTask(deque);
		//TODO:不认为线程安全。没有保证原子性，内存可见性
		for (int i = 0; i < 3; i++) {
			Thread thread = new Thread(writer);
			thread.start();
		}

		// Creates a cleaner task and starts them
		CleanTask cleaner = new CleanTask(deque);
		cleaner.start();

	}

}
